package org.xx.sipahi.jpa;

import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import java.io.Serializable;

import static javax.persistence.GenerationType.SEQUENCE;
import static org.apache.commons.lang3.StringUtils.trimToEmpty;

@Entity(name = "category")
@Table(name = "CM_CATEGORY")
@SequenceGenerator(name = "CC_ID",
                   sequenceName = "CC_ID",
                   allocationSize = 1)
@Access(AccessType.PROPERTY)
public class CategoryPO
        implements Serializable {
    private static final long serialVersionUID = 1L;

    private int id;

    private String title;

    private String description;

    private int pageSize;

    private String authority;

    private int module;

    private boolean enabled;

    private String tpl1;

    private String tpl2;

    // TODO: 上级栏目。

    /**
     * 获取栏目的ID。
     *
     * @return 栏目ID。
     */
    @Id
    @GeneratedValue(strategy = SEQUENCE,
                    generator = "CC_ID")
    @Column(name = "C_ID")
    public int getId() {
        return this.id;
    }

    /**
     * 设置栏目的ID。
     *
     * @param id
     *         栏目ID。
     */
    public void setId(
            int id
    ) {
        this.id = id;
    }

    /**
     * 获取栏目的标题。
     *
     * @return 栏目的标题。
     */
    @Column(name = "TITLE",
            nullable = false)
    public String getTitle() {
        return this.title;
    }

    /**
     * 设置栏目的标题。
     *
     * @param title
     *         栏目的标题。
     */
    public void setTitle(
            String title
    ) {
        this.title = trimToEmpty(title);
    }

    /**
     * 获取栏目的描述。
     *
     * @return 栏目的描述。
     */
    @Column(name = "DESCRIPTION",
            nullable = false)
    public String getDescription() {
        return this.description;
    }

    /**
     * 设置栏目的描述。
     *
     * @param description
     *         栏目的描述。
     */
    public void setDescription(
            String description
    ) {
        this.description = trimToEmpty(description);
    }

    /**
     * 获取栏目的每页记录数。
     *
     * @return 栏目的每页记录数。
     */
    @Column(name = "PAGE_SIZE",
            nullable = false)
    public int getPageSize() {
        return this.pageSize;
    }

    /**
     * 设置栏目的每页记录数。
     *
     * @param pageSize
     *         栏目的每页记录数。
     */
    public void setPageSize(
            int pageSize
    ) {
        this.pageSize = pageSize;
    }

    /**
     * 获取访问此栏目需要的权限。
     *
     * @return 访问此栏目需要的权限。
     */
    @Column(name = "AUTH",
            nullable = false)
    public String getAuthority() {
        return this.authority;
    }

    /**
     * 设置访问此栏目需要的权限。
     *
     * @param authority
     *         访问此栏目需要的权限。
     */
    public void setAuthority(
            String authority
    ) {
        this.authority = authority;
    }

    /**
     * 获取此栏目所属的模块。
     *
     * @return 此栏目所属的模块。
     */
    @Column(name = "MODU",
            nullable = false)
    public int getModule() {
        return this.module;
    }

    /**
     * 设置此栏目所属的模块。
     *
     * @param module
     *         此栏目所属的模块。
     */
    public void setModule(
            int module
    ) {
        this.module = module;
    }

    /**
     * 判断此栏目是否启用。
     *
     * @return 此栏目是否启用。
     */
    @Column(name = "ENABLED")
    public boolean isEnabled() {
        return this.enabled;
    }

    public void setEnabled(
            boolean enabled
    ) {
        this.enabled = enabled;
    }

    /**
     * 获取栏目的目录模板。
     *
     * @return 栏目的目录模板。
     */
    @Column(name = "TPL1")
    public String getTpl1() {
        return this.tpl1;
    }

    /**
     * 设置栏目的目录模板。
     *
     * @param tpl1
     *         栏目的目录模板。
     */
    public void setTpl1(
            String tpl1
    ) {
        this.tpl1 = tpl1;
    }

    /**
     * 获取栏目的内容模板。
     *
     * @return 栏目的内容模板。
     */
    @Column(name = "TPL2")
    public String getTpl2() {
        return this.tpl2;
    }

    /**
     * 设置栏目的内容模板。
     *
     * @param tpl2
     *         栏目的内容模板。
     */
    public void setTpl2(
            String tpl2
    ) {
        this.tpl2 = tpl2;
    }
}
